<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>


        // 深拷贝：两个对象包括里面的引用全部都不一样。

        // 什么时候才会用到深拷贝?
        //    希望改变一个对象数据的时候，不影响另一个对象时候。

        // 网上复制过来的深拷贝代码 - 通过遍历+递归实现
        function deepClone(obj) {
            let objClone = Array.isArray(obj) ? [] : {};
            if (obj && typeof obj === "object") {
                for (key in obj) {
                    if (obj.hasOwnProperty(key)) {
                        //判断ojb子元素是否为对象，如果是，递归复制
                        if (obj[key] && typeof obj[key] === "object") {
                            objClone[key] = deepClone(obj[key]);
                        } else {
                            //如果不是，简单复制
                            objClone[key] = obj[key];
                        }
                    }
                }
            }
            return objClone;
        }

        // 对象1
        const obj = {
            data: [
                { id: 1, name: '菠萝' },
                { id: 2, name: '雪梨' },
                { id: 3, name: '榴莲' }
            ],
            code: 200,
        }

        // 根据对象1 克隆出 对象2
        const newObj = deepClone(obj);

        console.log(newObj);
        console.log(obj);

        console.log(newObj.data === obj.data);  // false

    </script>
</body>

</html>